package com.ctrip.corp.obt.shard.annotation;

import com.ctrip.corp.obt.shard.sql.mybatis.interceptor.inner.PermissionInnerPlugin;
import com.ctrip.corp.obt.shard.sql.mybatis.interceptor.inner.TableRerouteInnerPlugin;
import com.ctrip.corp.obt.shard.sql.mybatis.interceptor.inner.TenantInnerPlugin;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * InnerPlugin Ignore注解，配置后可忽略某一个plugin的功能
 * 例如{@link InnerPluginIgnore#tenant()} 默认所有的sql都会带上租户id进行curd
 * 当filter为true，则不带上租户id，默认为false，表示所有的curd都会带上租户id
 *
 * @author marco.zheng
 * @since 2022-03-16
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface InnerPluginIgnore {

    /**
     * 行级租户 {@link TenantInnerPlugin}
     */
    boolean tenant() default false;

    /**
     * 表重路由 {@link TableRerouteInnerPlugin}
     */
    boolean tableReroute() default true;

    /**
     * 数据权限 {@link PermissionInnerPlugin}
     * 默认关闭，需要注解打开
     */
    boolean permission() default true;

    /**
     * 忽略所有插件
     * 默认关闭，需要注解打开
     */
    boolean ignoreAll() default false;
}
